package com.ft.javaio.nio;

import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @Author RenPu
 * @Date 2023/7/18 17:02
 * @Version 1.0
 * @Description:
 **/
public class FileChannel_003 {

    public static void main(String[] args) throws Exception {

        FileOutputStream outputStream = new FileOutputStream("");
        FileChannel channel = outputStream.getChannel();

        ByteBuffer bytebuf = ByteBuffer.wrap("hello Word".getBytes());

        channel.write(bytebuf);

        //强制操作系统缓存刷入磁盘，不用走os 调度缓存策略，保证数据的安全性
        //force() 方法有一个布尔参数 metadata，用于指定是否同时刷入文件的元数据。
        // 将参数设置为 true 可以确保文件的内容和元数据都被刷入磁盘。
        // 如果只需要刷入文件内容而不关心元数据，可以将参数设置为 false
        channel.force(false);

        //advice:使用 force() 方法时要谨慎，因为它可能会导致性能下降。通常情况下，
        // 操作系统会根据自身的缓存策略自动将数据刷入磁盘，而不需要手动调用 force() 方法。
        // 只有在确保数据持久化非常重要的情况下，才需要使用该方法。

        //释放资源
        outputStream.close();
        channel.close();


    }
}
